using System;
using System.Collections.Generic;
using Microsoft.AspNetCore.Mvc;
using JNPF.Basics.Models;
using JNPF.Basics.Logic;
using JNPF.Utils;
using System.Threading.Tasks;
using System.Linq;
using JNPF.Utils.Controller;
using JNPF.Basics.Logic.Common.Login;
using JNPF.Utils.Extensions;
using JNPF.Basics.Models.Extend.Model;
using System.ServiceModel.Security;

namespace JNPF.Basics.Controller
{
    [Route("api/Jiushi/[Controller]")]
    public class CustomerneedrecordController : BaseApiController
    {
        private CustomerneedrecordBll CustomerneedrecordService = new CustomerneedrecordBll();
        private CustomerloanBll CustomerloanService = new CustomerloanBll();
        private BillRuleBll billRuleService = new BillRuleBll();
        private DataInterfaceBll dataInterfaceBll = new DataInterfaceBll();
        private UserBll userBll = new UserBll();
        private OrganizeBll organizeBll = new OrganizeBll();


        #region GET

        /// <summary>
        /// 获取信息
        /// </summary>
        /// <param name="id">主键id</param>
        /// <returns></returns>
        [HttpGet("{id}")]
        public async Task<ResponseResult> GetInfo(int id)
        {
            var data = await CustomerneedrecordService.GetInfo(id);
            var output = data.MapTo<CustomerneedrecordUpOutput>();
            return Success(output);
        }

        /// <summary>
        /// 获取列表
        /// </summary>
        /// <param name="input">请求参数</param>
        /// <returns></returns>
        [HttpGet]
        public async Task<ResponseResult> GetList(CustomerneedrecordListQueryInput input)
        {
            var data = await CustomerneedrecordService.GetPageList(input);
            var outputList = data.list.MapToList<CustomerneedrecordListOutput>();
            UserEntity user = null;

            outputList.ForEach(async o =>
            {
                CustomerloanListQueryInput cqi = new CustomerloanListQueryInput();
                cqi.customerNeedRecordId = o.id;
                o.customerloanList = CustomerloanService.GetList(cqi).Result;
                o.detailcount = o.customerloanList.Count();
                if (o.customerloanList.Any())
                {
                    o.detailTime = o.customerloanList.FirstOrDefault().CreatorTime;
                    o.detailId = o.customerloanList.FirstOrDefault().Id;

                }

                user = await userBll.GetInfo(o.accountManagerUserId);

                if (user != null)
                {
                    o.mobilePhone = user.MobilePhone;
                    o.nickName = user.NickName;
                }

            });



            var output = new PageResult()
            {
                list = outputList,
                pagination = data.pagination
            };
            return Success(output);
        }

        #endregion

        #region POST

        /// <summary>
        /// 新建
        /// </summary>
        /// <param name="input">新建输入</param>
        /// <returns></returns>
        [HttpPost]
        public async Task<ResponseResult> Create([FromBody] CustomerneedrecordCrInput input)
        {
            var entity = input.MapTo<CustomerneedrecordEntity>();
            await CustomerneedrecordService.Create(entity);
            return Success("新建成功");
        }

        /// <summary>
        /// 编辑
        /// </summary>
        /// <param name="id">主键id</param>
        /// <param name="input">编辑输入</param>
        /// <returns></returns>
        [HttpPut("{id}")]
        public async Task<ResponseResult> Update(int id, [FromBody] CustomerneedrecordCrInput input)
        {
            var entity = input.MapTo<CustomerneedrecordEntity>();
            var isOk = await CustomerneedrecordService.Update(id, entity);
            return isOk > 0 ? Success("修改成功") : Error("修改失败");
        }

        /// <summary>
        /// 删除接口
        /// </summary>
        /// <param name="id">主键id</param>
        /// <returns></returns>
        [HttpDelete("{id}")]
        public async Task<ResponseResult> Delete(int id)
        {
            var entity = await CustomerneedrecordService.GetInfo(id);
            var isOk = await CustomerneedrecordService.Delete(entity);
            return isOk > 0 ? Success("删除成功") : Error("删除失败");
        }

        #endregion

    }
}